home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 [x86] / NeXT Step 3.1 Intel.cdr.dmg / private / etc / rc.boot.standard < prev    next >
Text File  |  1992-12-08  |  4KB  |  149 lines

  1. #!/bin/sh -u
  2. #
  3. # This script sets up the machine enough to run single-user
  4. #
  5. # Copyright (C) 1992 by NeXT Computer, Inc.  All rights reserved.
  6. #
  7. # Note that all "echo" commands are in parentheses so that
  8. # the main shell does not open a tty and get its process group set.
  9.  
  10. . /.path
  11.  
  12. iscdrom=0
  13.  
  14. (echo)                                 > /dev/console
  15.  
  16. # Start with some -- any! -- reasonable hostname
  17. hostname localhost
  18.  
  19. # Are we booting from a CD-ROM?  If so, make a note of the fact.
  20.  
  21. if [ -d /NextCD ]; then
  22.   (echo "Root device is a CD-ROM.  Filesystem checks skipped.") > /dev/console
  23.   iscdrom=1
  24. fi
  25.  
  26. swapfile=/private/vm/swapfile
  27. swapdir=/private/vm
  28.  
  29. # We must fsck here before we touch anything in the filesystems.
  30. fsckerror=0
  31.  
  32. # Output the date for reference.
  33. date                                >/dev/console
  34.  
  35. # Don't fsck if we're single-user, or if we're on a CD-ROM.
  36.  
  37. if [ $1x = singleuserx -a $iscdrom -ne 1 ]; then
  38.     (echo "Singleuser boot -- fsck not done")        >/dev/console
  39.     # Ensure that the root filesystem is mounted read-write.
  40.     mount -o remount /                    >/dev/console
  41.     # Is there a swapfile?  Print a warning if not.
  42.     if [ ! -f $swapfile ]; then
  43.         (echo "No default swapfile present!")        >/dev/console
  44.     fi
  45. elif [ $iscdrom -ne 1 ]; then
  46.     # We're neither single-user nor on a CD-ROM.
  47.     fbshow -A -B -E -I "Checking*Disk..."
  48.     (echo Checking disks)                    >/dev/console
  49.     # Benignly clean up ("preen") any dirty filesystems. 
  50.     # fsck -p will skip disks which were properly unmounted during
  51.     # a normal shutdown.
  52.     fsck -p                         >/dev/console 2>&1
  53.     # fsck's success is reflected in its status.
  54.     case $? in
  55.         0)
  56.             # No problems
  57.         ;;
  58.         2) 
  59.             # Request was made (via SIGQUIT, ^\) to complete fsck
  60.         # but prevent going multi-user.
  61.         (echo "Request to remain single-user received.") > /dev/console
  62.         fsckerror=1
  63.         ;;
  64.         
  65.         4)
  66.         # The root filesystem was checked and fixed.  Let's reboot.
  67.         # Note that we do NOT sync the disks before rebooting, to
  68.         # ensure that the filesystem versions of everything fsck fixed
  69.         # are preserved, rather than being overwritten when in-memory
  70.         # buffers are flushed.
  71.         (echo "Root fixed - rebooting.")        >/dev/console
  72.         reboot -q -n
  73.         ;;
  74.         8)
  75.         # Serious problem was found.
  76.         (echo "Reboot failed...help!")            >/dev/console
  77.         fsckerror=1
  78.         ;;
  79.         12)
  80.         # fsck was interrupted by SIGINT (^C)
  81.         (echo "Reboot interrupted.")            >/dev/console
  82.         fsckerror=1
  83.         ;;
  84.         *)
  85.         # Some other error condition ocurred.
  86.         (echo "Unknown error in reboot fsck.")        >/dev/console
  87.         fsckerror=1
  88.         ;;
  89.     esac
  90.     # Ensure root filesystem is mounted read-write.
  91.     mount -o remount /                    >/dev/console
  92.     # Make sure the swapfile exists
  93.     if [ ! -f $swapfile ]; then
  94.         (echo -n "Creating default swapfile")        >/dev/console
  95.         mkdirs -o root -g wheel -m 755 $swapdir
  96.         touch $swapfile
  97.         # Swapfile needs to have the "sticky" bit set.
  98.         chmod 1600 $swapfile
  99.         (echo " - rebooting")                >/dev/console
  100.         reboot -q
  101.     fi
  102. fi
  103.  
  104. # Read in configuration information.
  105. . /etc/hostconfig
  106.  
  107. # Fake mount entries for root and private filesystems (i.e., ensure that
  108. # they appear in /etc/mtab; filesystems mounted by the kernel aren't yet
  109. # recorded in mtab).
  110.  
  111. if [ $iscdrom -ne 1 ]; then
  112.     (echo "Faking root mount entries")            >/dev/console
  113.     # Clean out /etc/mtab.
  114.     > /etc/mtab
  115.     mount -f /
  116.     mount -f /private
  117. fi
  118.  
  119. sync
  120.  
  121. # If booted into single-user mode from a CD-ROM, print out some hints 
  122. # about how to fake up /tmp and get to other disks.
  123.  
  124. if [ $1x = singleuserx -a $iscdrom -eq 1 ]; then
  125.     (( 
  126.         echo ""
  127.     echo "You are now in single-user mode while booted from a CD-ROM."
  128.     echo "Since the root disk is read-only, some commands may not work as"
  129.     echo "they normally do.  In particular, commands that try to create"
  130.     echo "files in /tmp will probably fail.  One way to avoid this problem"
  131.     echo "is to mount a separate hard disk or floppy on /tmp using the"
  132.     echo "mount command.  For example,'/etc/mount -n /dev/fd0a /tmp' puts"
  133.     echo "/tmp on the internal floppy disk of a NeXTstation. (The -n"
  134.     echo "option prevents mount from trying to record the mount in"
  135.     echo "/etc/mtab.)"
  136.     echo ""
  137.     ) > /dev/console )
  138. fi
  139.  
  140. # Exit with error if failed above.  ifconfig exits 1 if the error is 
  141. # a showstopper and 2 if it is not.  The only non-showstopper is the network
  142. # being down.
  143.  
  144. if [ $fsckerror -ne 0 ]; then
  145.     exit 1
  146. fi
  147.  
  148. exit 0
  149.